const BASE_URL = '/api';
const TIMEOUT = 5000;

export default (params) => {
  const url = params.url;
  const method = params.method?.toLowerCase() || 'get'; 
  const queryParams = params.params || {}; // 提取查询参数
  const data = params.data || {};

  // 拼接查询参数到 URL 中（针对 GET 请求）
  const queryString = Object.keys(queryParams)
    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(queryParams[key])}`)
    .join('&');
const finalUrl = (method.toLowerCase() === 'get' || method.toLowerCase() === 'put') && queryString 
  ? `${BASE_URL}${url}?${queryString}` 
  : `${BASE_URL}${url}`;


  // 默认头信息
  const defaultHeader = {
    'Blade-Auth': uni.getStorageSync('token') || '',
    'Content-Type': 'application/json;charset=UTF-8',
    'Authorization': 'Basic c2FiZXI6c2FiZXJfc2VjcmV0',
    'Tenant-Id': uni.getStorageSync('tenantId') || 'xxx', // 自定义租户
  };

  // 根据请求方法动态调整 header
  const header = {
    ...defaultHeader,
    ...params.header, // 允许用户自定义覆盖
  };

  // 返回 Promise
  return new Promise((resolve, reject) => {
    uni.request({
      url: finalUrl, // 使用拼接后的完整 URL
      method,
      header,
      data: method === 'get' ? undefined : data, // GET 请求无需请求体
      timeout: TIMEOUT,
      success(response) {
        const res = response;

        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          // 清理本地存储，统一处理异常
          uni.clearStorageSync();
          switch (res.statusCode) {
            case 401:
              uni.showModal({
                title: '提示',
                content: '登录已过期，请重新登录',
                showCancel: false,
                success() {
                  uni.navigateTo({
                    url: '/pages/login/index',
                  });
                },
              });
              break;
            case 404:
              uni.showToast({
                title: '请求地址不存在...',
                icon: 'none',
                duration: 2000,
              });
              break;
            default:
              uni.showToast({
                title: res.data.message || '服务器异常，请稍后再试',
                icon: 'none',
                duration: 2000,
              });
              break;
          }
          reject(res);
        }
      },
      fail(err) {
        console.error('请求失败:', err);
        const errMsg = err.errMsg || '未知错误';
        uni.showToast({
          title: errMsg.includes('request:fail') ? '网络异常，请检查网络连接' : errMsg,
          icon: 'error',
          duration: 2000,
        });
        reject(err);
      },
      complete() {
        uni.hideLoading();
        uni.hideToast();
      },
    });
  }).catch((error) => {
    console.error('请求异常:', error);
  });
};

